package p8selfSort;

import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.function.CustomScoreProvider;

import java.io.IOException;

public class MyCustomScoreProvider extends CustomScoreProvider {
    //获取域缓存，中的指定字段
    String names []=null;

    public MyCustomScoreProvider(IndexReader reader) throws IOException {
        super(reader);
        names= FieldCache.DEFAULT.getStrings(reader,"name");
    }

    /**
     * subQueryScore表示默认文档的打分，
     * valSrcScores 表示评分域的打分(这个参数可以是一个数组，表示按多个字段评分)
     */

    @Override
    public float customScore(int doc, float subQueryScore, float valSrcScores) throws IOException {
        //return super.customScore(doc,subQueryScore,valSrcScores);
        //这里我们可以定义自己的一套算法，做各种操作，
        System.out.println("=============>" + "subQueryScore:" + subQueryScore + ",valSrcScores:" + valSrcScores);

        //1,默认
        //return super.customScore(doc, subQueryScore, valSrcScores);
        //2,比如，下面就是按评分降序排序，
        //return subQueryScore/valSrcScores;

        //3,这里准备根据name 的不同进行打分
        //首先要根据doc参数 获取相应的field 值，在reader 没有关闭之前，所有的字段都会存储
        //在一个叫做 域缓存 的地方（会占用大量内存），可以通过域缓存获取很多有用的信息
        float score=subQueryScore;
        String name=names[doc];
        if(name.startsWith("q")){
            return  subQueryScore*1.5f;
        }
        return subQueryScore/1.5f;
    }
}
